package com.yunpeng.aidevice.dao.service;

import com.yunpeng.aidevice.dao.model.entity.RoleDO;
import com.yunpeng.aidevice.dao.model.relation.UserRoleDO;

import java.util.Date;
import java.util.List;

/**
 * IRoleService 角色服务
 *
 * @author : Moore(hemw)
 * @date : 2020-04-15
 */
public interface IRoleService {
    /**
     * 根据角色代码获取角色对象
     *
     * @param roleCode 角色代码
     * @return
     */
    RoleDO getByCode(String roleCode);

    /**
     * 统计权限关联角色数量
     *
     * @param permissionCode 二选一
     * @param roleCode       二选一
     * @return
     */
    Integer countPermissionRelation(String permissionCode, String roleCode);

    /**
     * 新增角色
     *
     * @param roleName     角色名称
     * @param operatorCode 操作人代码
     * @return
     */
    Boolean addNew(String roleName, String operatorCode);

    /**
     * 删除角色
     *
     * @param roleCode 角色代码
     * @return
     */
    Boolean remove(String roleCode);

    /**
     * 绑定权限角色
     *
     * @param roleCode       角色代码
     * @param permissionCode 权限代码
     * @param operatorCode   操作人代码
     * @return
     */
    Boolean bindPermission(String roleCode, String permissionCode, String operatorCode);

    /**
     * 解绑角色权限
     *
     * @param roleCode       角色代码
     * @param permissionCode 权限代码
     * @return
     */
    Boolean unbindPermission(String roleCode, String permissionCode);

    /**
     * 用户绑定角色
     *
     * @param roleCode     角色代码
     * @param userCode     用户代码
     * @param startTime    起始生效时间
     * @param endTime      生效截止时间
     * @param operatorCode 操作人代码
     * @return
     */
    Boolean userBindRole(String roleCode, String userCode, Date startTime, Date endTime, String operatorCode);

    /**
     * 解除用户角色绑定
     *
     * @param roleCode 角色代码
     * @param userCode 用户代码
     * @return
     */
    Boolean userUnBindRole(String roleCode, String userCode);

    /**
     * 统计用户角色数量 （有效中）
     *
     * @param roleCode 角色代码
     * @param userCode 用户代码
     * @return
     */
    Integer existUserRoleCount(String roleCode, String userCode);

    /**
     * 查询当前用户和角色关联数据 （生效的）
     *
     * @param roleCode 角色代码
     * @return
     */
    List<UserRoleDO> queryUserRoleListByRole(String roleCode);

    /**
     * 验证用户编辑用户信息权限
     *
     * @param userCode
     * @param loginUserCode
     * @return
     */
    Boolean checkUpdateAnotherUserInfo(String userCode, String loginUserCode);

    /**
     * 验证用户是否具有某种角色
     *
     * @param roleCode 角色代码
     * @param userCode 用户代码
     * @return
     */
    Boolean checkUserRole(String roleCode, String userCode);
}
